home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / MAGAZINE / @FALCON / FALK'MAG / SOURCE.COD / FLI / FLICODE.LST
Encoding:
File List  |  1995-06-28  |  7.8 KB  |  287 lines

  1. ' ****************************************************************
  2. ' * PROGRAMME PERMETTANT DE VISUALISER DES FICHIERS D'ANIMATIONS *
  3. ' * DU TYPE FLI EN 320X200X256 COULEURS.                         *
  4. ' * JE NE TIENS COMPRTE ICI QUE DES FLI's LES PLUS REPANDUS CAD  *
  5. ' * CE DONT LA SIGNATURE EST AF11.                               *
  6. ' * ET AUSSI DES CHUNKS (MAINTENANT VOUS DEVEZ SAVOIR CE QUE CELA*
  7. ' * SIGNIFIE !!) LES PLUS CONNUS C'EST-A-DIRE :                  *
  8. ' *          FLI_COLOR | FLI_BRUN | FLI_COPY | FLI_BLACK         *
  9. ' * CE CODE N'A POUR PRETENTION DE BATTRE DES RECORDS DE VITESSE *
  10. ' * MAIS PLUTOT DE MONTRER LA SYNOPTIQUE GENERAL D'UN VISUALISEUR*
  11. ' * DE FLI. ET PEUT-ETRE DE METTRE LE PIED A L'ETRIER A DE       *
  12. ' * NOUVEAU CODERS. WHY NOT ?. GOOD LUCK !!!                     *
  13. ' * J'ESPERE QUE LE CODE EST COMPREHENSIBLE ET BIEN COMMENTER    *
  14. ' * C'EST RAREMENT MON HABITUDE MAIS ICI J'AI FAIT UN EFFFFOOORT *
  15. ' *                                                              *
  16. ' *            CODE BY -HIGHT SPIRIT- FOR FALK' MAG              *
  17. ' *          (C)ODERIGHT -CHRONOS- JANVIER 1995                  *
  18. ' *                      E N J O Y  I T ! ! !                    *
  19. ' * HI TO : TBTB - TAN NOZ - KIUKO - SOYUZ - C.I.A - FAUCONTACT -*
  20. ' * RSC/STUPEFIANT - STMAG - EKO - ABSTRACT - ET TOUS LES AUTRES *
  21. ' * QUI FONT QU'ATARI SOIT AU MEILLEUR DE SA FORME. MERCI ATARI  *
  22. ' * POUR CE QUE TU NOUS FAIS VIVRE... THE PASSION.               *
  23. ' ****************************************************************
  24. '
  25. ' ≥ Cela suffit pour le GFA-BASIC ≤
  26. RESERVE 10000
  27. ' ≥ VAR. CHEMIN ACCES AU FLI THANXS DE LA COMPLETEE ≤
  28. chemin$="c:\tempo\*.fli"
  29. chemin$="f:\projets\playfli\fli\*.fli"
  30. ' ≥ Securite au cas ou l'on breakerait ou surgierait du fin fond des ≤
  31. ' ≥ tenebres une abominable erreurs car la rezo bonjour en GFABASIC  ≤
  32. ON BREAK GOSUB fin
  33. ON ERROR GOSUB fin
  34. ' ≥ Detection de l'ecran, du mode pour etre compatible avec les      ≤
  35. ' ≥ ecran RGB et VGA, car cela deplait enormement qu'un programme    ≤
  36. ' ≥ tourne sur RGB ou VGA et pas RGB ET VGA et c'est comprehensible  ≤
  37. '
  38. ' ≥ PREND ANCIEN MODE ≤
  39. '   ╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣
  40. old_mode%=XBIOS(88,-1)
  41. '
  42. ' ≥ PREND TYPE ECRAN  ≤
  43. '   ╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣
  44. type_ecran%=XBIOS(89)
  45. IF type_ecran%=2
  46.   new_mode%=51 ! 59 -> 80 colonnes
  47. ELSE
  48.   new_mode%=35 ! 43 -> 80 colonnes
  49. ENDIF
  50. '
  51. ' ≥ PLACE NOTRE NOUVEAU MODE AVEC ASSEZ DE PLACE POUR RAM ECRAN ≤
  52. '   ╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣
  53. old_phy%=XBIOS(2)
  54. old_log%=XBIOS(3)
  55. '
  56. ram_ecran%=XBIOS(91,new_mode%)
  57. adr%=MALLOC(ram_ecran%)
  58. IF adr%<=0 THEN
  59.   PRINT "Erreur allocation memoire ecran."
  60.   END
  61. ENDIF
  62. VOID XBIOS(5,L:adr%,L:adr%,W:3,W:new_mode%)
  63. '
  64. ' ≥ Reservation MEV pour notre FLI ≤
  65. ' ≥ avec 1Mo il y en a assez non ! ≤
  66. ' ≥ sinon on augmente............! ≤
  67. tmp%=MALLOC(1000000)
  68. IF tmp%<=0
  69.   PRINT "Erreur : allocation mev tampon fli"
  70.   fin
  71. ENDIF
  72. '
  73. FILESELECT chemin$,"",n$
  74. CLS
  75. IF NOT EXIST(n$)
  76.   PRINT "Erreur : fichier inexistant !!!"
  77.   fin
  78. ELSE
  79.   ' ≥ Charge le FLI en MEV ≤
  80.   adr%=tmp%
  81.   BLOAD n$,adr%
  82.   ' ≥ Foutu format INTEL pouach !!! ≤
  83.   ' ≥ Donc ci on prend les infos du HEADER FILE ≤
  84.   sizefich%=FN convert(4,adr%)
  85.   idenfli%=VAL("&"+HEX$(FN convert(2,adr%+4),4))
  86.   IF idenfli%<>&HAF11
  87.     PRINT "Ce fichier n'est pas un FLI"
  88.     fin
  89.   ENDIF
  90.   nbrepict%=FN convert(2,adr%+6)
  91.   largpict%=FN convert(2,adr%+8)
  92.   highpict%=FN convert(2,adr%+10)
  93.   bitbypix%=FN convert(2,adr%+12)
  94.   speedfli%=FN convert(2,adr%+14)
  95.   adr%=adr%+128
  96.   ' ≥ Boucle globale du nombre d'image(s) du FLI ≤
  97.   FOR t=1 TO nbrepict%
  98.     ' ≥ Prend infos HEADER FRAME (ON SUIT TOUJOURS ?!!) ≤
  99.     sizeframe%=FN convert(4,adr%)
  100.     idenframe%=FN convert(2,adr%+4)
  101.     nbrechunk%=FN convert(2,adr%+6)
  102.     adr%=adr%+16
  103.     ' ≥ Boucle globale du nombre de chunk(s) / frame ≤
  104.     FOR u=1 TO nbrechunk%
  105.       ' ≥ Prend infos HEADER CHUNK (TOUJOURS LA !!!) ≤
  106.       sizechunk%=FN convert(4,adr%)
  107.       typechunk%=FN convert(2,adr%+4)
  108.       adr%=adr%+6
  109.       ' ≥ Et appel procedure selon le type de CHUNK ≤
  110.       SELECT typechunk%
  111.       CASE 11
  112.         analyse_palette
  113.       CASE 12
  114.         analyse_modifiee
  115.       CASE 13
  116.         CLS
  117.       CASE 15
  118.         analyse_compresse
  119.       CASE 16
  120.         ' ≥ +2 Car si vous vous souvenez je vous est dit que la longueur ≤
  121.         ' ≥ de ce type de Chunk n'etait pas 320x200=64000+6(HEADER)=64006≤
  122.         ' ≥ MAIS 320X200=64000+4(???ENCORE UN COUP DU PC)=64004 DONC ON  ≤
  123.         ' ≥ RAJOUTE 2 PUISQUE APRES ON ENLEVE 6 CELA FAIT 4 LOGIQUE NON! ≤
  124.         sizechunk%=sizechunk%+2
  125.       DEFAULT
  126.         ' ≥ CE PASSE DE COMMENTAIRES ≤
  127.         PRINT "Chunk inconnu !!!"
  128.       ENDSELECT
  129.       ' ≥ -6 car on a deja ajouter la longueur de HEADER CHUNK ≤
  130.       adr%=adr%+sizechunk%-6
  131.     NEXT u
  132.   NEXT t
  133. ENDIF
  134. ' ≥ FIN DE LA VISUALISATION DU FLI ≤
  135. fin
  136. > FUNCTION convert(type,adresse%)
  137. ' ≥ Foutu Fonction de convertion d'un format intel en MOTOROLA ≤
  138. ' ≥ JE HAIS DE PLUS EN PLUS INTEL JE SUIS FIER D'ETRE MOTOROLA ≤
  139. ' ≥ ON CONVERTIE ICI QUE LES WORDS ET LES LONGS WORDS          ≤
  140. ' ≥ IL NE MANQUERAIT QUE L'ON CON VERTISSE LES BYTES AVEC      ≤
  141. ' ≥ intel IL FAUT S'ATTENDRE A TOUT............                ≤
  142. '
  143. SELECT type
  144. CASE 4
  145.   b%=0
  146.   POKE V:b&,PEEK(adresse%+3)
  147.   POKE V:b%+1,PEEK(adresse%+2)
  148.   POKE V:b%+2,PEEK(adresse%+1)
  149.   POKE V:b%+3,PEEK(adresse%)
  150.   RETURN b%
  151. CASE 2
  152.   b&=0
  153.   POKE V:b&,PEEK(adresse%+1)
  154.   POKE V:b&+1,PEEK(adresse%)
  155.   RETURN b&
  156. ENDSELECT
  157. ENDFUNC
  158. > PROCEDURE fin
  159. ' ≥ On libere la MEV du fichier FLI ≤
  160. ~MFREE(tmp%)
  161. ' ≥ On restitue le mode et les ecrans d'avant le deluge ≤
  162. VOID XBIOS(5,L:old_log%,L:old_phy%,W:3,W:old_mode%)
  163. ' ≥ Libere la MEV ecran ≤
  164. ~MFREE(adr%)
  165. '
  166. END
  167. RETURN
  168. > FUNCTION touche
  169. RETURN (0)
  170. ENDFUNC
  171. '
  172. > PROCEDURE analyse_palette
  173. LOCAL ad%,add%
  174. ad%=adr%
  175. npackcolor%=FN convert(2,ad%)
  176. ad%=ad%+2
  177. FOR cl=1 TO npackcolor%
  178. nnochange%=PEEK(ad%)
  179. INC ad%
  180. nchange%=PEEK(ad%)
  181. INC ad%
  182. IF nchange%=0
  183.   nchange%=255
  184. ENDIF
  185. a$=STRING$(4,0)
  186. lm=V:a$
  187. FOR i=0 TO nchange%
  188.   POKE lm,(PEEK(ad%)/64)*255
  189.   INC ad%
  190.   POKE lm+1,(PEEK(ad%)/64)*255
  191.   INC ad%
  192.   POKE lm+3,(PEEK(ad%)/64)*255
  193.   INC ad%
  194.   SLPOKE &HFFFF9800+(nnochange%*4)+(i*4),LPEEK(lm)
  195.   DEFFILL i
  196.   PBOX i,0,i,200
  197. NEXT i
  198. NEXT cl
  199. ~INP(2)
  200. RETURN
  201. > PROCEDURE analyse_modifiee
  202. LOCAL ad%
  203. ad%=adr%
  204. nochangeline%=FN convert(2,ad%)
  205. ad%=ad%+2
  206. nchangeline%=FN convert(2,ad%)
  207. ad%=ad%+2
  208. t$=""
  209. FOR ligne=0 TO nchangeline%-1
  210. px=0
  211. npacketlg%=PEEK(ad%)
  212. INC ad%
  213. FOR cptp=1 TO npacketlg%
  214.   px=px+PEEK(ad%)
  215.   INC ad%
  216.   compteur=PEEK(ad%)
  217.   INC ad%
  218.   IF compteur=0
  219.     ' Ligne inchangée
  220.   ELSE
  221.     IF compteur<128
  222.       FOR aff=1 TO compteur
  223.         valeur=PEEK(ad%)
  224.         INC ad%
  225.         PSET px,nochangeline%+ligne,valeur
  226.         INC px
  227.       NEXT aff
  228.     ELSE
  229.       compteur=256-compteur
  230.       valeur=PEEK(ad%)
  231.       INC ad%
  232.       FOR aff=1 TO compteur
  233.         PSET px,nochangeline%+ligne,valeur
  234.         INC px
  235.       NEXT aff
  236.     ENDIF
  237.   ENDIF
  238. NEXT cptp
  239. NEXT ligne
  240. RETURN
  241. > PROCEDURE analyse_compresse
  242. LOCAL ad%,adp%
  243. ad%=adr%
  244. npacketlg%=PEEK(ad%)
  245. n1octet%=PEEK(ad%+1)
  246. adp%=ad%
  247. ad%=ad%+2
  248. FOR ligne=0 TO 200-1
  249. px=0
  250. npacketlg%=PEEK(adp%)
  251. INC adp%
  252. FOR cptp=1 TO npacketlg%
  253.   compteur=PEEK(adp%)
  254.   INC adp%
  255.   IF compteur<128
  256.     valeur=PEEK(adp%)
  257.     INC adp%
  258.     FOR aff=1 TO compteur
  259.       PSET px,ligne,valeur
  260.       INC px
  261.     NEXT aff
  262.   ELSE
  263.     compteur=256-compteur
  264.     FOR aff=1 TO compteur
  265.       valeur=PEEK(adp%)
  266.       INC adp%
  267.       PSET px,ligne,valeur
  268.       INC px
  269.     NEXT aff
  270.   ENDIF
  271. NEXT cptp
  272. NEXT ligne
  273. RETURN
  274. > PROCEDURE analyse_complete
  275. LOCAL px%,py%,adp%
  276. '
  277. ' ≥ Copie adresse courante, ici debut CHUNK ≤
  278. adp%=adr%
  279. ' ≥ Affichage une image de 320x200 ≤
  280. FOR py%=0 TO PRED(200)
  281. FOR px%=0 TO PRED(320)
  282.   PSET px%,py%,PEEK(adp%)
  283.   INC adp%
  284. NEXT px%
  285. NEXT py%
  286. RETURN
  287.